package com.malou.server.ventas.cambio;

import java.sql.SQLException;
import java.util.List;

import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.malou.client.ventas.cambio.Cambio;
import com.malou.client.ventas.ingresostock.IngresoStock;
import com.malou.client.ventas.salidastock.SalidaStock;
import com.malou.server.base.Conexion;
import com.malou.server.base.util.GxtGridPaginate;

public class Cambios {

	public static Integer tienda_id;
	private static SqlMapClient sqlMap;

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<Cambio> getPaginate(GxtGridPaginate paginate) {	      
		
		sqlMap = Conexion.getSqlMap();
		paginate.setLimit();
		
		if(paginate.order.equals("")){
			paginate.order = " order by id desc";
		}
		List<Cambio> data = null;
		try {
			data = sqlMap.queryForList("paginateCambio", paginate);				
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<Cambio>(data, paginate.offset, count(paginate));
	}

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<Cambio> getPaginateDevolucion(GxtGridPaginate paginate) {	      
		
		sqlMap = Conexion.getSqlMap();
		paginate.setLimit();
		
		if(paginate.order.equals("")){
			paginate.order = " order by id desc";
		}
		List<Cambio> data = null;
		try {
			data = sqlMap.queryForList("paginateDevolucion", paginate);				
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<Cambio>(data, paginate.offset, count(paginate));
	}

	private static Integer count(GxtGridPaginate paginate) {
		Integer count = null;
		try {
			count = (Integer) sqlMap.queryForObject("countCambio", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}
	
	public static boolean save(Cambio c,List<IngresoStock> listIngreso,List<SalidaStock> listSalida){
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();
		try{
			sqlMap.startTransaction();
			Integer c_tda_id = c.getTienda_id();
			sqlMap.insert("insertCambio",c);
			Integer c_id = c.getId();
			
			for(IngresoStock is:listIngreso){
			    is.setCambio_id(c_id);
			    is.setTienda_id(c_tda_id);
			    sqlMap.update("updateStocktiendaingreso_Cambio", is);		
		        sqlMap.update("incrementaStock_Cambio", is);
		        sqlMap.insert("insertEntrada_Cambio",is);
				}
			for(SalidaStock ss:listSalida){
				ss.setCambio_id(c_id);
				ss.setTienda_id(c_tda_id);
				sqlMap.update("updateStocktiendaegreso_Cambio", ss);		
				sqlMap.update("disminuyeStock_Cambio", ss);
				sqlMap.insert("insertSalida_Cambio",ss);
			}
			
			if(retorno){        		        			
        		sqlMap.commitTransaction();
    		}
		
		}catch(Exception e){
			retorno = false;
			try{
			  sqlMap.endTransaction();
			}catch(Exception ex){}
			  e.printStackTrace();
		 }
		if(!retorno){
			try{
				retorno = false;
  				sqlMap.endTransaction();
     		}catch(Exception ex){}
		}
		return retorno;
	}
	
	
	public static boolean save(Cambio cam, List<IngresoStock> listIngreso){
	
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();
		try{
			sqlMap.startTransaction();
			Integer c_tda_id = cam.getTienda_id();
			sqlMap.insert("insertCambio",cam);
			Integer c_id = cam.getId();
			
			for(IngresoStock is:listIngreso){
			    is.setCambio_id(c_id);
			    is.setTienda_id(c_tda_id);
			    System.out.println("el cambio_id es = "+is.getCambio_id());
			    sqlMap.update("updateStocktiendaingreso_Cambio", is);		
		        sqlMap.update("incrementaStock_Cambio", is);
		        sqlMap.insert("insertEntrada_Cambio",is);
				}
			
			if(retorno){        		        			
        		sqlMap.commitTransaction();
    		}
		
		}catch(Exception e){
			retorno = false;
			try{
			  sqlMap.endTransaction();
			}catch(Exception ex){}
			  e.printStackTrace();
		 }
		return retorno;

	}
	
	
	@SuppressWarnings("unchecked")
	public static List<IngresoStock> getListIngresoStock(Integer cambio_id){
		sqlMap = Conexion.getSqlMap();
		
		List<IngresoStock> data = null;
		
		try{ 
			System.out.println("el cambio_id server:"+cambio_id);
		    data = sqlMap.queryForList("getListIngresoStock",cambio_id);	
		}catch(Exception e){
			e.printStackTrace();
		}
		return data;
	}
	
	@SuppressWarnings("unchecked")
	public static List<SalidaStock> getListSalidaStock(Integer cambio_id){
        sqlMap = Conexion.getSqlMap();
        
        List<SalidaStock> data = null;
        try{
        	data = sqlMap.queryForList("getListSalidaStock",cambio_id);
        }catch(Exception e){
        	e.printStackTrace();
        }
        return data;
	}
	
	@SuppressWarnings("unchecked")
	public static List<Cambio> getListDevoluciones(){
		sqlMap = Conexion.getSqlMap();
		
		List<Cambio> data = null;
		try{
			data = sqlMap.queryForList("getListDevoluciones");
			
		}catch(Exception e){
			e.printStackTrace();
		}
		return data;
	}

}
